package com.zhuhao.leetcode.arithmetic;

import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Collectors;

/**
 * 将句子排序
 * <p>
 * 一个 句子 指的是一个序列的单词用单个空格连接起来，且开头和结尾没有任何空格。每个单词都只包含小写或大写英文字母。
 * <p>
 * 我们可以给一个句子添加 从 1 开始的单词位置索引 ，并且将句子中所有单词 打乱顺序 。
 * <p>
 * 比方说，句子 "This is a sentence" 可以被打乱顺序得到 "sentence4 a3 is2 This1" 或者 "is2 sentence4 This1 a3" 。
 * 给你一个 打乱顺序 的句子 s ，它包含的单词不超过 9 个，请你重新构造并得到原本顺序的句子。
 * <p>
 * 思路：本质是一个数字排序，设法取出包含的数字，对数字排序，还原为最终的句子
 *
 * @Author haozhu7
 * @Date 2024/3/12 15:17
 **/
public class Demo240312 {

    private final String sentenceStr = "this is a big big pig";
    private final String disorderSentenceStr = "pig6 a3 big4 big5 this1 is22";

    /**
     * 直接使用流式处理，
     * <p>
     * 这种方式处理的数字不能超过两位数
     */
    @Test
    public void solve01() {
        String collect = Arrays.stream(disorderSentenceStr.split(" "))
                .sorted(Comparator.comparingInt(x -> x.charAt(x.length() - 1)))
                .collect(Collectors.joining(" "));
        System.out.println(collect);
    }

    /**
     * 这种可以处理多位数字，
     */
    @Test
    public void solve02() {
        String collect = Arrays.stream(disorderSentenceStr.split(" "))
                .sorted(Comparator.comparingInt(this::handlerStr))
                .collect(Collectors.joining(" "));
        System.out.println(collect);
    }

    public int handlerStr(String str) {
        StringBuilder number = new StringBuilder();
        char[] charArray = str.toCharArray();
        for (int i = charArray.length - 1; i >= 0; i--) {
            if (Character.isDigit(charArray[i])) {
                number.insert(0, charArray[i]);
            }
        }

        return Integer.parseInt(number.toString());
    }


}
